import { valiCode } from '@/conf'
import jwt_decode from 'jwt-decode'

export const isLogin = () => {
  let token = window.sessionStorage.getItem('token')
  if (!token) return false

  return jwt_decode(token, valiCode)
}
export function plusZero(n) {
    return n > 10 ? n : '0' + n;
}
export function dateConvert(str) {
    let date = new Date(str);

    return date.getFullYear() + '-'
    + plusZero(date.getMonth()) + '-'
    + plusZero(date.getDate()) + ' '
    + plusZero(date.getHours()) + ':'
    + plusZero(date.getMinutes()) + ':'
    + plusZero(date.getSeconds())
    
    return `${date.getFullYear()}-${plusZero(date.getMonth())}-${plusZero(date.getDate())} ${plusZero(date.getHours())}:${plusZero(date.getMinutes())}:${plusZero(date.getSeconds())} `
}
// console.log(dateConvert(new Date().getTime()))
/**
 * 深拷贝
 * @param {object} obj 数据
 * @returns 
 */
export const deepClone = (obj)=>{  
  // 处理环形对象带来的递归栈内存溢出
  let cache = new WeakMap(); // 避免强引用
  var objType = '[object Object]';
  function innerDeepClone(obj) {
      // 处理了基本数据类型  undefined null function
      if (typeof obj !== 'object' || !obj) {
          return obj;
      }
      // obj不是方法的参数, 改变的this,由于不同类型的对象的type不同,
      // toString从不同this拿到的就不一样
      // var type = Object.prototype.toString.call(obj);
      if (cache.has(obj)) {
          return cache.get(obj);
      }
      let tmp;
      // 处理非对象和数组
      if (obj instanceof Map) {
          tmp = new Map();
          cache.set(obj,tmp);
          obj.forEach((val, key) => {
              tmp.set(innerDeepClone(key), innerDeepClone(val))
          })
      } else if (obj instanceof Set) {
          tmp = new Set();
          cache.set(obj,tmp);
          obj.forEach(val => {
              tmp.add(innerDeepClone(val))
          })
      } else if (obj instanceof RegExp || obj instanceof Date) {
          tmp = new obj.constructor(obj);  
          cache.set(obj,tmp);
      } else {
          tmp = new obj.constructor();
          cache.set(obj,tmp);
          for (let key in obj) {
              tmp[key] = innerDeepClone(obj[key]);
          }
      }
      return tmp;
  }
  return innerDeepClone(obj)
}
/**
 * 防抖函数
 * @param {function} func
 * @param {number} [wait=1000]
 * @return {function} 
 */
export function debounce(func,wait=1000) {
    let timer;
    return function(){
        clearTimeout(timer);
        // timer = setTimeout(()=>{
        //     func(this)
        //     func.call(this)
        // },await);
        timer = setTimeout(func.bind(this),wait);
    }
}
export async function downloadByTag(blob, fileName) {
    // 1. 创建a标签
    const tagA = document.createElement('a');
    // 1.5. 用blob生成内存中的临时url
    const memoryUrl = window.URL.createObjectURL(blob);
    console.log('memoryUrl:', memoryUrl)
    // 2. download：fileName 和 href属性：blob的url
    tagA.href = memoryUrl;
    tagA.download = fileName;
    tagA.style.display = 'none'; // 避免回流
    // 3. 不影响用户体验的插入DOM
    document.body.appendChild(tagA);
    // 4. 模拟用户点击
    tagA.click();
    // 5. 释放临时url的内存指向
    window.URL.revokeObjectURL(memoryUrl);
    // 6. a删除DOM
    document.body.removeChild(tagA);

}